/**
 * 这是用来格式化内容的工具函数
 */
/**
 *返回值处理%
 * @param {String} value
 * @returns {String} value处理百分号的值
 */
export function parseDeletePer(str) {
  if (str) {
    if (str.substring(str.length - 1) === "%") {
      return str.substring(0, str.length - 1)
    } else {
      return str
    }
  } else {
    return ''
  }
}
// 银行卡号分割 - 以空格分割
export function format_bank(str) {
  if (!str) return str;

  str = String(str);

  if (str.length <= 4) return str;

  const yushu = str.length % 4;
  if (yushu > 0) {
    return str.match(/[\dA-Za-z\-]{4}/g).join(' ') + ' ' + str.substr(-yushu, yushu);
  } else {
    return str.match(/[\dA-Za-z\-]{4}/g).join(' ');
  }
}

// 手机号格式化 3 4 4
export function format_phone(str) {
  if (!str) return str;

  str = String(str);

  if (str.length <= 3) return str;

  str = '0' + str;

  str = format_bank(str);
  return str.slice(1);
}
/**
 * 银行卡号或者身份证号 - 展示前四位和后四位, 其他使用掩码
 * @param {String} str 需要进行掩码的内容
 * @returns {String} 掩码后的内容
 */
export function format_bank_mask(str) {
  if (!str || str.length <= 8) return str;

  str = String(str);
  // 获取前四位 和 后四位
  const fourStr = str.slice(0, 4);
  const afterFourStr = str.slice(-4);
  return `${fourStr} **** **** ${afterFourStr}`;
}

/**
 * 根据设置, 返回不同的格式化内容
 * @param {String} AcNo 账号
 * @returns 格式化后账号
 */
export function getformatAcNo(AcNo) {
  // 获取设置账户保护标识 显示/隐藏账号
  let acNoFormatFlag = null;
  try {
    acNoFormatFlag = context.sessionGetString('acNoFormatFlag');
  } catch (e) { }

  if (acNoFormatFlag === 'N') {
    // 没有开启账号保护, 格式化账号
    return format_bank(AcNo);
  } else {
    return format_bank_mask(AcNo);
  }
}

/**
 * 手机号 - 展示前三位和后四位, 其他使用掩码
 * @param {String} str 需要进行掩码的内容
 * @returns {String} 掩码后的内容
 */
export function format_phone_mask(str) {
  if (!str || str.length < 11) return str;

  str = String(str);
  // 获取前三位 和 后四位
  const fourStr = str.slice(0, 3);
  const afterFourStr = str.slice(-4);
  return `${fourStr} **** ${afterFourStr}`;
}

/**
 * 身份证号 - 展示前六位和后四位, 其他使用掩码
 * @param {String} str 需要进行掩码的内容
 * @returns {String} 掩码后的内容
 */
export function format_ID_mask(str) {
  if (!str || str.length < 10) return str;

  str = String(str);
  // 获取前三位 和 后四位
  const fourStr = str.slice(0, 6);
  const afterFourStr = str.slice(-4);
  return `${fourStr} **** ${afterFourStr}`;
}

/** 日期 2021-4-7 - 格式化日期
 * options
 *  year: number, 用于往前(往后)设置年份
 *  month: number, 用于往前(往后)设置月份
 *  day: number, 用于往前(往后)设置某日
 *  separator: String, 分割符, 默认为 -
 *  date: String(number), 基准日期
 */
export function format_date(options) {
  if (!options) options = {};

  let date = new Date();
  const separator = options.separator || '-';
  // 是否存在基准日期
  if (options.date != null) {
    // 规范化时间
    if (typeof options.date === 'string') {
      if (typeof /\D/g.test(options.date)) {
        options.date = options.date.replace(/^(\d{4})(\d{1,2})(\d{1,2})$/, '$1/$2/$3');
      }
      options.date.replace(/-/g, '/');
    }

    date = new Date(options.date);
  }
  // 处理年
  if (options.year != null) {
    date.setFullYear(date.getFullYear() + options.year);
  }
  // 处理月
  if (options.month != null) {
    let dateMonth = date.getMonth();
    let month = dateMonth + options.month;
    if (month < 0) {
      // 如果差值小于 0, 则需要往后退一年
      date.setFullYear(date.getFullYear() - 1);
      month = month + 12;
    } else if (month > 11) {
      // 如果大于 1, 则需要往前进一年
      date.setFullYear(date.getFullYear() + 1);
      month = month - 12;
    }
    date.setMonth(month);
  }
  // 处理日
  if (options.day != null) {
    // 直接处理时间戳即可
    const day = options.day * 24 * 60 * 60 * 1000;
    date.setTime(date.getTime() + day);
  }

  return `${date.getFullYear()}${separator}${date.getMonth() < 9 ? '0' : ''}${date.getMonth() + 1}${separator}${date.getDate() <= 9 ? '0' : ''
    }${date.getDate()}`;
}

/** 格式化金额
 * options: Object 配置项
 *  isSeparator: Boolean 是否需要格式化金额, 以 , 分隔 -- 默认需要
 *  separator: 分隔符 -- 默认为 ,
 *  decimal: 保留小数尾数 默认无
 */
export function format_money(money, isSeparator, separator, decimal) {
  if (money == null) return money;
  if (decimal) {
    money = parseFloat(money).toFixed(decimal);
  }
  const isNegative = +money < 0;
  money = String(money); // 保证是字符串

  money = money.replace(/[^\d\.]/g, '');

  if (money[0] === '.') {
    // 如果是以 . 开头的话, 那么就追加一个 0
    money = '0' + money;
  }

  // 进行以 , 分隔金额
  if (!isSeparator) {
    const money_arr = money.split('.');
    const moneyInteger = money_arr[0].split('');
    const format_result = [];

    for (let index = moneyInteger.length - 1, counter = 0; index >= 0; index--) {
      counter++;
      format_result.unshift(moneyInteger[index]);
      if (!(counter % 3) && index !== 0) {
        format_result.unshift(separator || ',');
      }
    }

    if (money_arr.length === 2) {
      format_result.push('.' + money_arr[1]);
    }

    money = format_result.join('');
  }

  return `${isNegative ? '-' : ''}${money}`;
}

/**
 * 为金额添加小数点
 * @param {*} money 金额
 * @returns 格式化后的值
 */
export function format_decimal(money, decimal = 2) {
  return format_money(money, false, false, decimal);
}

//截取卡号后四位
export function last4AcNo(account) {
  if (!account) return account;

  account = String(account).replace(/\s/gi, '');
  return account.slice(-4);
}

//名字中间*处理
export function processName(str) {
  if (null != str && str != undefined) {
    let star = ''; //存放名字中间的*
    //名字是两位的就取姓名首位+*
    if (str.length <= 2) {
      return str.substring(0, 1) + '*';
    } else {
      for (var i = 0; i < str.length - 2; i++) {
        star = star + '*';
      }
      return str.substring(0, 1) + star + str.substring(str.length - 1, str.length);
    }
  }
}

/**
 * 根据需求, 小数位最多为 8 位, 当不足两位时, 自动补全两位
 * @param {String | Number} money 格式化的金额
 * @param {Boolean} isPercentage 是否需要 % 默认需要
 * @returns 格式化后的内容
 */

// 乘法解决精度丢失
function floatMultiply(arg1, arg2) {
  if (arg1 == null || arg2 == null) {
    return null;
  }
  var n1, n2;
  var r1, r2; // 小数位
  try {
    r1 = arg1.toString().split('.')[1].length;
  } catch (error) {
    r1 = 0;
  }
  try {
    r2 = arg2.toString().split('.')[1].length;
  } catch (error) {
    r2 = 0;
  }
  n1 = Number(arg1.toString().replace('.', ''));
  n2 = Number(arg2.toString().replace('.', ''));
  return (n1 * n2) / Math.pow(10, r1 + r2);
}

// 除法解决精度丢失
function floatDivide(arg1, arg2) {
  if (arg1 == null) {
    return null;
  }
  if (arg2 == null || arg2 == 0) {
    return null;
  }
  var n1, n2;
  var r1, r2; // 小数位
  try {
    r1 = arg1.toString().split('.')[1].length;
  } catch (error) {
    r1 = 0;
  }
  try {
    r2 = arg2.toString().split('.')[1].length;
  } catch (error) {
    r2 = 0;
  }
  n1 = Number(arg1.toString().replace('.', ''));
  n2 = Number(arg2.toString().replace('.', ''));
  return (n1 / n2) * Math.pow(10, r2 - r1);
}
export function format_money_decimal(money, isPercentage) {
  money = Math.floor(floatMultiply(parseFloat(money) || 0, 100000000)) / 100000000;

  // 当小数位不足两位时, 自动补全
  if (!/^-?\d+\.\d{2}/.test(String(money))) {
    money = money.toFixed(2);
  }

  return String(money) + (!isPercentage ? '%' : '');
}

/**
 * 根据需求, 小数位最多为 4 位, 当不足四位时, 自动补全四位 -- 需求又变更了
 * @param {String | Number} money 格式化的金额
 * @param {Boolean} isPercentage 是否需要 % 默认需要
 * @param {Number} decimal 小数位个数, 默认 8 位
 * @returns 格式化后的内容
 */
export function format_money_decimal_jingzhi(money, isPercentage, decimal = 8) {
  money = (floatMultiply(parseFloat(money) || 0, Math.pow(10, decimal)) / Math.pow(10, decimal)).toFixed(4);

  // 当小数位不足四位时, 自动补全
  if (!/^-?\d+\.\d{4}/.test(String(money))) {
    money = money.toFixed(4);
  }

  return String(money) + (!isPercentage ? '%' : '');
}

export function format_money_decimal_qiri(money, isPercentage, decimal = 2) {
  money = parseFloat(money) || 0 * Math.pow(10, decimal) / Math.pow(10, decimal);

  // 当小数位不足四位时, 自动补全
  if (!/^-?\d+\.\d{2}/.test(String(money))) {
    money = money.toFixed(2);
  }

  return String(money) + (!isPercentage ? '%' : '');
}

/**
 * 将金额设为 xx 万
 * @param {String | Number} money 金额
 * @returns
 */
export function format_wan(money) {
  let unit = '';
  money = +money || 0;

  if (money >= 10000) {
    unit = '万';
    money = money / 10000;
  }

  return format_money(money) + unit;
}

/**
 * 股票类型
 * @param {*} num 
 * @returns 
 */
export function AttrTxt(val) {
  var AttrType = "";
  if (val == '0') AttrType = "普通型";
  else if (val == '1') AttrType = "股票型";
  else if (val == '2') AttrType = "债券型";
  else if (val == '3') AttrType = "混合型";
  else if (val == '4') AttrType = "货币型";
  else if (val == '9') AttrType = "组合型";
  return AttrType;
}

/**
 * 产品风险等级
 * @param {*} num 
 * @returns 
 */
export function IsTextRisk(val) {
  var Txts = "";
  if (val == '0') Txts = "未评定";
  else if (val == '1') Txts = "低风险";
  else if (val == '2') Txts = "中低风险";
  else if (val == '3') Txts = "中风险";
  else if (val == '4') Txts = "中高风险";
  else if (val == '5') Txts = "高风险";
  return Txts;
}

/**
 * 根据需求, 小数位最多为 2 位, 当不足2位时, 自动补全2位
 * @param {String | Number} money 格式化的金额
 * @param {Boolean} isPercentage 是否需要 % 默认需要
 * @returns 格式化后的内容
 */
export function format_money_decimal_qiri_jingdu(money, isPercentage) {
  if (money) {
    money = String(money); // 保证是字符串
    if (money.indexOf("%") != -1) {
      money = money.replace('%', '')
      return money
    } else {
      money = money * Math.pow(10, money.length) / Math.pow(10, money.length)

      // 当小数位不足2位时, 自动补全
      if (!/^-?\d+\.\d{2}/.test(String(money))) {
        money = money.toFixed(2);
      } else {
        money = money.toFixed(2);
      }
      return String(money) + (!isPercentage ? '%' : '');
    }
  } else {
    return '0.00'
  }
}

/**
 * 根据需求, 小数位最多为 2 位, 当不足2位时, 自动补全2位
 * @param {String | Number} money 格式化的金额
 * @param {Boolean} isPercentage 是否需要 % 默认需要
 * @returns 格式化后的内容
 */
export function format_money_decimal_jingdu(money, isPercentage) {
  if (money) {
    money = String(money); // 保证是字符串
    if (money.indexOf("%") != -1) {
      money = money.replace('%', '')
      return money
    } else {
      money = money * Math.pow(10, money.length) / Math.pow(10, money.length - 2)

      // 当小数位不足2位时, 自动补全
      if (!/^-?\d+\.\d{2}/.test(String(money))) {
        money = money.toFixed(2);
      } else {
        money = money.toFixed(2);
      }
      return String(money) + (!isPercentage ? '%' : '');
    }
  } else {
    return '0.00'
  }
}
export function formattingDate(str) { // 格式化日期 如 20210201 - 2021-02-01
  if (str && str.length == 8) {
    let date = str.toString()
    let y = date.slice(0, 4)
    let m = date.slice(4, 6)
    let d = date.slice(6)
    return `${y}-${m}-${d}`
  } else {
    return ''
  }
}

